package reflect;

import java.lang.reflect.Method;

/**
 * JAVA 反射机制:
 * 反射是java的动态机制,可以在程序[运行期间]
 */
public class ReflectDemo1 {
    public static void main(String[] args) {
        /*
            类对象Class类的实例
            在JVM中每个被加载的类都有只且有一个Class的实例与之对应.
            当我们需要使用一个类时,JVM会首先读取该类的.class(字节码)文件,读取后就会同时
            实例化一个Class的实例用来记录该类的信息(名字,构造器,方法,属性等)并与该类绑定.

            反射的第一步就是要获取待操作的类的类对象
            获取类对象的方式:
            1:类名.class

         */
        //获取String的类对象
        Class cla = String.class;
        String name = cla.getName();//获取当前类对象所表示的完全限定名
        System.out.println(name);//java.lang.String

        name = cla.getSimpleName();//获取当前类对象名(仅类名)
        System.out.println(name);//String

        Method[] methods = cla.getMethods();//获取当前类对象所表示的所有公开方法(包含继承的超类的公开方法)
        for(Method method:methods){
            String methodName = method.getName();
            System.out.println(methodName);
        }

        Package pack = cla.getPackage();//获取当前类对象的包
        System.out.println(pack.getName());//获取包名---java.lang

    }
}
